In modern day computing systems, rendering content onto a screen of a computer or other device may be done using one or more processes. In a single processing environment, a rendering process renders a frame of data from an application onto a buffer, and a graphics processing unit (GPU) renders the buffered data onto a screen of a device. This process then repeats in a continuous loop, in which the rendering process is blocked from performing any additional functions until the GPU calls for the frame stored in the buffer.
In a multi-processing system, the interaction between the rendering process and the GPU also works in a continuous loop, except that the rendering process will continue to generate frames and store them in the buffer at a rate faster than the GPU can render the frames for display, until the buffer is full. When the buffer is full, the rendering process will then be blocked, and will wait until the buffer is empty to begin generating new frames of data.
Blocking the rendering process while waiting for the GPU wastes valuable processing resources on a computing device, in both single-processing and multi-processing systems. Allowing the rendering process to continually process contents until the buffer is full, often results in a choppy image or animation on the screen, because the rendering process will wait or be blocked from resuming additional frame processing until the buffer is empty.